package cn.tedu.justone.pack02;

/**
 * @作者：JustOne
 * @时间：2021/8/22 - 10:24
 */
public class Demo01_方法示例_获取线程的生命状态是否为活动状态 {
    static final String LOCK = "刘景景";

    public static void main(String[] args) {

        //线程的常用方法-示例：获取当前线程的生命状态是否为活动状态
        //线程的常用方法-示例：获取当前线程的生命状态是否为活动状态
        //线程的常用方法-示例：获取当前线程的生命状态是否为活动状态

        //Alive:而来屋

        //获取当前线程的生命状态是否为活动状态
        // 1,我们可以用boolean isa = t.isAlive();判断t线程是否处于活动状态
        // 2,一个线程从启动后 到 终止前，无论是在运行、还是各种阻塞、等待...
        //   它都是存活的，即t.isAlive() 为 true




        //创建一个线程，用于被检测
        Thread t1 = new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 5; i++) {
                    System.out.println(i);
                    mySleep(150);//sleep时t.isAlive();为true
                }
                System.out.println("for运行完毕");
            }
        };
        //第一检测点：new出来但还没有执行start()时：false
        System.out.println("第一检测点 = "+t1.isAlive());

        t1.start();

        //第二检测点：执行start()后：true
        System.out.println("第二检测点 = "+t1.isAlive());

        //第N检测点：线程运行过程中一直为true，直到线程终止
        //每秒检测一次t1的生命状态，运行完了，它的生命状态就不为活了
        for (int i = 0; i < 10; i++) {
            System.out.println("第N检测点 = "+t1.isAlive());
            mySleep(100);
        }


    }

    //为了让代码更优雅，编写统一的休眠方法
    public static void mySleep(long m){
        try {
            Thread.sleep(m);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
